package com.sisgesbyte.services.ventas;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.ventas.MantEstructuraVentaDao;
import com.sisgesbyte.data.entity.ventas.EstructuraVentaEntity;
import com.sisgesbyte.services.ventas.bean.EstructuraVentaFO;
import com.sisgesbyte.services.ventas.bean.EstruturaVentaBean;
import com.sisgesbyte.services.ventas.bean.ListaEstructuraVentaResponse;

@Stateless
public class MantEstructuraVentaServiceImpl implements MantEstructuraVentaService {

	@EJB
	private MantEstructuraVentaDao mantEstructuraVentaDao;

	@Inject
	private Validaciones validaciones;
	
	@Override
	public ListaEstructuraVentaResponse mostrarEstructuraVenta(
			String codTransaccion, EstructuraVentaFO filtroOpciones) {
		String mensajeTransaccionMetodo = "[mostrarEstructuraVenta idTx=" + codTransaccion + "] - ";
		ListaEstructuraVentaResponse response = new ListaEstructuraVentaResponse();
		
		List<EstructuraVentaEntity> listaEstructura = null;
		try{
			FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
			List<Object> valores = new ArrayList<>();
			List<FiltrosBean> filtro = new ArrayList<FiltrosBean>();

			if(filtroOpciones.getActive() != null){
				FiltrosBean listaActive = new FiltrosBean();
				List<String> campoActive = new ArrayList<String>();
				campoActive.add("active");
				listaActive.setCampos(campoActive);
				listaActive.setOperador("=");
				filtro.add(listaActive);
				valores.add(filtroOpciones.getActive());
			}
			
			if(filtroOpciones.getTxtBuscar()!=null ){
				if(filtroOpciones.getTxtBuscar().trim().length() > 0){
					FiltrosBean listaCampo = new FiltrosBean();
					List<String> campo = new ArrayList<String>();
					campo.add("nombre");
					campo.add("descripcion");
					listaCampo.setCampos(campo);
					listaCampo.setOperador("like");
					filtro.add(listaCampo);
					valores.add("%" + filtroOpciones.getTxtBuscar() + "%");
				}
			}
			
			filtroSQL.setListaFiltros(filtro);
			filtroSQL.setListaValores(valores);
			filtroSQL.setCampoOrden("nombre");
			filtroSQL.setTipoOrden("asc");
			listaEstructura = mantEstructuraVentaDao.listaEstructuraVenta(filtroSQL);
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		if(listaEstructura.size() > 0){
			List<EstruturaVentaBean> lista = new ArrayList<EstruturaVentaBean>();
			for(EstructuraVentaEntity row : listaEstructura){
				EstruturaVentaBean bean = new EstruturaVentaBean();
				bean.setActive(row.getActive());
				bean.setDescripcion(validaciones.validarCamposString(row.getDescripcion()));
				bean.setId(row.getId());
				bean.setNivel(row.getNivel());
				bean.setNombre(validaciones.validarCamposString(row.getNombre()));
				bean.setOrden(row.getOrden());
				bean.setPadreId(row.getPadre_id());
								
				lista.add(bean);
			}
			response.setListaEstructuraVenta(lista);
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
		}else{
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
		}

		return response;
	}

}
